
// pages/calendar/index.js
const { todoManager } = require('../../utils/cloud')
const { formatDateTime, compareDateTime } = require('../../utils/dateHelper')
const { toast, nav, errorHandler } = require('../../utils/uiHelper')

const app = getApp()

Page({
  data: {
    selectedDate: new Date().toISOString().split('T')[0],
    todos: [],
    isLoading: false
  },

  onLoad: async function() {
    // 检查登录状态
    const isLogin = app.globalData.isLogin
    
    if (isLogin) {
      // 确保使用当前日期的零点
      const today = new Date()
      const todayStr = today.toISOString().split('T')[0]
      
      this.setData({ selectedDate: todayStr })
      await this.loadTodosForDate(todayStr)
    } else {
      app.checkLogin()
    }
  },

  onShow: async function() {
    if (app.globalData.isLogin) {
      // 强制重新加载当前选中日期的数据
      const { selectedDate } = this.data
      console.log('日历页面 onShow - 当前选中日期:', selectedDate)
      
      // 清空现有数据，避免显示旧数据
      this.setData({ todos: [] })
      
      // 重新加载数据
      await this.loadTodosForDate(selectedDate)
    }
  },

  onPullDownRefresh: async function() {
    if (app.globalData.isLogin) {
      await this.loadTodosForDate(this.data.selectedDate)
    }
    wx.stopPullDownRefresh()
  },

  // 格式化时间显示
  formatReminderTime: function(timeString) {
    const date = new Date(timeString);
    console.log('格式化时间 - 原始时间字符串:', timeString);
    console.log('格式化时间 - Date对象:', date);
    
    // 使用本地时间
    const hours = date.getHours().toString().padStart(2, '0');
    const minutes = date.getMinutes().toString().padStart(2, '0');
    const formattedTime = `${hours}:${minutes}`;
    
    console.log('格式化时间 - 最终显示:', formattedTime);
    return formattedTime;
  },

  // 日期选择处理
  async onDateSelect(e) {
    const date = e.detail.value
    this.setData({
      selectedDate: date
    })
    await this.loadTodosForDate(date)
  },

  // 重置为今天
  resetToToday: async function() {
    console.log('日历页面 - 重置为今天按钮点击');
    const today = new Date().toISOString().split('T')[0];
    
    this.setData({
      selectedDate: today
    });
    
    await this.loadTodosForDate(today);
    toast.success('已切换到今天');
  },

  // 加载指定日期的待办事项
  async loadTodosForDate(date) {
    try {
      this.setData({ isLoading: true })
      toast.loading('加载中...')

      // 构建日期范围
      const selectedDate = new Date(date)
      const startDate = new Date(selectedDate)
      startDate.setHours(0, 0, 0, 0)
      const endDate = new Date(selectedDate)
      endDate.setHours(23, 59, 59, 999)

      console.log('日历页面 - 加载日期:', date);
      console.log('日历页面 - 日期范围:', startDate, '至', endDate);

      // 调用云函数获取数据
      const result = await todoManager.listTodos({
        date: selectedDate.toISOString().split('T')[0]  // 只传递日期部分 YYYY-MM-DD
      })

      if (result.code === 0) {
        console.log('日历页面 - 获取到的待办事项:', result.data);
        
        // 筛选当天的待办事项 - 确保日期匹配
        const filteredTodos = result.data.filter(todo => {
          if (!todo.reminderTime) return false;
          
          const todoDate = new Date(todo.reminderTime);
          const todoDateStr = todoDate.toISOString().split('T')[0];
          const selectedDateStr = selectedDate.toISOString().split('T')[0];
          
          console.log('比较日期:', todoDateStr, selectedDateStr, todoDateStr === selectedDateStr);
          return todoDateStr === selectedDateStr;
        });
        
        console.log('日历页面 - 筛选后的待办事项:', filteredTodos);

        // 处理待办事项数据
        const todos = filteredTodos.map(todo => ({
          ...todo,
          displayTime: this.formatReminderTime(todo.reminderTime),
          isOverdue: !todo.status && compareDateTime.isBeforeNow(todo.reminderTime)
        }))

        this.setData({ todos })
      } else {
        throw new Error(result.msg)
      }
    } catch (err) {
      console.error('加载待办事项失败：', err)
      errorHandler.handle(err, '加载待办事项失败')
    } finally {
      this.setData({ isLoading: false })
      toast.hideLoading()
    }
  },

  // 跳转到添加页面
  onAddTodo: function() {
    if (!app.checkLogin()) return
    
    // 跳转到编辑页面，并传入当前选中的日期
    nav.to(`/pages/edit/index?date=${this.data.selectedDate}`)
  },

  // 跳转到编辑页面
  onEditTodo: function(e) {
    const id = e.currentTarget.dataset.id
    nav.to(`/pages/edit/index?id=${id}`)
  },

  // 切换待办事项状态
  async onToggleStatus(e) {
    try {
      const id = e.currentTarget.dataset.id
      const result = await todoManager.toggleTodoStatus(id)
      
      if (result.code === 0) {
        // 更新本地数据
        const todos = this.data.todos.map(todo => {
          if (todo._id === id) {
            return { ...todo, status: result.data.status }
          }
          return todo
        })
        this.setData({ todos })
        toast.success('状态已更新')
      } else {
        throw new Error(result.msg)
      }
    } catch (err) {
      errorHandler.handle(err, '更新状态失败')
    }
  }
})